LinuC-2 - 202試験 - 2.12:システムのセキュリティ - 2.12.2 OpenSSH サーバーの設定と管理

Last Update : January 02 2021 16:07:32

     

a. sshの設定

SSHとは、ネットワークを介して別のコンピュータにログインしたり、遠隔地のマシンでコマンドを実行したり、他のマシンへファイルを移動したりするためのプログラム。SSHではネットワーク上を流れるデータは暗号化されるため、インターネット経由でも一連の操作を安全に行うことができます。
OpenSSH を使ってセキュアな通信を構築していきます。


■OpenSSLのダウンロード

Version openssl-0.9.7c
Homepage http://www.openssl.org/
Download http://www.openssl.org/source
Install openssl-0.9.7c.tar.gz

※追記 2005/8/8:openssl-0.9.7d.tar.gzでも動作確認済み。0.9.8の場合だとopenssh でエラーが発生した。

まず、本家OpenSSLよりをソースパッケージをダウンロードしてきてください。ここでは、openssl-0.9.7c.tar.gzをダウンロードして解説を進めていきます。

■OpenSSLのインストール

OpenSSLはデフォルトでは、/usr/local/ssl にインストールされます。デフォルトのインストール先を変更する場合は、--openssldir で指定します。ここでは、オプションを指定せずにインストールを行います。

$ cd /usr/local/src
$ tar xzvf openssl-0.9.7c.tar.gz
$ cd openssl-0.9.7c.tar.gz
$ ./config
$ make
$ make test
$ su
# make install


■OpenSSH のダウンロード

Version openssh-3.7.1p2
Homepage http://www.openssh.com/ja/
Download ftp://ftp.iij.ad.jp/pub/OpenBSD/OpenSSH/portable/
Install openssh-3.7.1p2.tar.gz
RH9:zlib-1.1.4-8.i386.rpm
RH9:pam-0.75-48.i386.rpm (任意)
RH9:tcp_wrappers-7.6-34.i386.rpm (任意)

※追記 2005/8/8:openssh-4.0p1.tar.gzでも動作確認済み(組:openssl-0.9.7d.tar.gz)

OpenSSH を使用するには、OpenSSL と zlib が必要となります。zlib には、Red Hat9に付属のものを使うことにします。インストールされていなければ、インストールしておいてください。また、OpenSSH を ソースパッケージからインストールする方は、予めRPMパッケージをアンインストールしておきます。

# rpm -q zlib pam tcp_wrappers openssh openssh-server openssh-clients
zlib-1.1.4-8
pam-0.75-48
tcp_wrappers-7.6-34
openssh-3.5p1-6
openssh-server-3.5p1-6
openssh-clients-3.5p1-6

# rpm -e openssh openssh-server openssh-clients

■OpenSSH 専用のユーザーとグループの作成

Privilege separationがデフォルトで有効になっているため、専用のsshd ユーザーの作成が必要となります。sshd は、その他のデーモンプロセスによって使われるべきではないので、ログインできないようにnologin とし、shell も無効に設定します。また、/var/empty の中身は空っぽの状態にしておき、privsepが有効且つ、プリログイン時には、sshd は /var/tempty にchroot されます。詳しくは、/[src]/ README.privsep を参照してください。

# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd


■OpenSSH のインストール

configure オプションには、TcpWrappers との連携を行いたい場合は --with-tcp-wrappers 、PAM 認証を行うのであれば --with-pam が必要となります。また、--with-ssl-dir=/usr/local/ssl でOpenSSLのパスを指定しておきます。

$ cd /usr/local/src
$ tar xzvf openssh-3.7.1p2.tar.gz
$ cd openssh-3.7.1p2
$ ./configure --with-ssl-dir=/usr/local/ssl --with-pam
--with-md5-passwords
$ make
$ su
# make install


■/usr/local/etc/sshd_config の設定

OpenSSH はデフォルトで、root でのログインが可能な設定にされているので禁止させておきます。

PermitRootLogin no

また、パスワードが設定されていないユーザーのログインを禁止します。デフォルトで有効になっていますので確認してください。コメントがついている場合は、デフォルト値が設定されています。

PermitEmptyPasswords no


■PAM 認証の設定

PAM 認証を有効にするには、/usr/local/src/openssh-3.7.1p2/contrib 配下にあるサンプルファイル、sshd.pam.generic を /etc/pam.d にコピ&リネームーします。

# cd /usr/local/src/openssh-3.7.1p2/contrib/
# cp sshd.pam.generic /etc/pam.d/sshd

次に、/etc/pam/sshd を編集しておきます。pam_unix.so の箇所をpam_pwdb.so に変更します。

#vi /etc/pam.d/sshd
#%PAM-1.0 auth required /lib/security/pam_pwdb.so shadow nodelay auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so shadow nullok use_authtok session required /lib/security/pam_pwdb.so session required /lib/security/pam_limits.so

■OpenSSH の起動

# /usr/local/sbin/sshd

■OpenSSH の動作確認

SSH のプロセスを確認後、ポートスキャンして22番ポートが開いているかどうか確認してください。

$ ps aux | grep sshd
root 25828 0.0 0.4 2552 1088 ? S 13:41 0:00 /usr/local/sbin/sshd

$ nmap localhost

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on ns1.click-rescue.com (127.0.0.1):
(The 1589 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
23/tcp open telnet
53/tcp open domain
110/tcp open pop-3
139/tcp open netbios-ssn
901/tcp open samba-swat
953/tcp open rndc
3128/tcp open squid-http
5432/tcp open postgres
8080/tcp open http-proxy

■OpenSSH の自動起動設定

Red Hat 用の起動スクリプトがデフォルトで用意されているので、これを./etc/r.cd/init.d 以下にコピーしておきます。なお、私の環境では、起動プログラムのパスが、/usr/local/sbin/sshd のため、SSHD=/usr/local/sbin/sshd に編集しなおしています(デフォルトは、SSHD=/usr/sbin/sshd)。

# cd /usr/local/src/openssh-3.7.1p2
# cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
# chkconfig --add sshd
# chkconfig --list sshd


■RSA暗号鍵の作成

認証を強固にするため、OpenSSH では公開鍵とパスフレーズによる認証を行うことが出来るようになっています。SSH2 プロトコルでは、RSA と DSA のどちらかの認証方式を利用することができます。ここでは、TeraTermを使用することを前提として、rsa1 で暗号鍵の作成を行ってみます(TeraTermではrsa1のみに対応しています)。RSA暗号鍵はユーザーごとに作成する必要があり、ユーザーのホームディレクトリの.ssh/ 以下に identityとして作成されます(秘密鍵)。公開鍵は、indentity.pub。まず、一般ユーザーとしてログインしてください。途中、パスフレーズの入力を求められますが、パスフレーズにはパスワードとは違い、空白を挿入することができます。スペースを混在させることでよりセキュアなパスフレーズを作成することができます。他の暗号鍵作成コマンドはこちらを参照

$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/sakura/.ssh/identity):[ ENTER ]
Enter passphrase (empty for no passphrase):  //パスフレーズを入力
Enter same passphrase again:
Your identification has been saved in /home/sakura/.ssh/identity.
Your public key has been saved in /home/sakura/.ssh/identity.pub.
The key fingerprint is:
2a:c0:b8:c5:c4:15:ed:88:0a:74:b2:6f:a7:c3:7b:cb sakura@serv.click-rescue.com

クライアントからRSAキーでログインする際にはアカウントの公開鍵が authorized_keys ファイルに登録されている必要があるため、以下のようにしてコピーして新規にauthorized_keysを作成しておきます。cp の -p オプションは、タイムスタンプやパーミッションの属性などをそのままコピーします。

$ cd .ssh
$ cp -p identity.pub authorized_keys

なお、既にauthorized_keys が作成されている場合、以下のようにして追加します。

$ cd .ssh
$ cat identity.pub >> authorized_keys

次に、秘密鍵ファイルである、.ssh/identity をWindows 上にTeraTerm のディレクトリの中にコピーしておきます。但し、これでは誰でも秘密鍵を盗める状態になってしまうので、2000/XP を使用しているならば、自分のDocuments and Settings 等に置いておきましょう。

次に平文パスワードを無効にし、RSA認証を有効にするために、sshd_config の以下の行を編集します。

# vi /usr/local/etc/sshd_config
PasswordAuthentication no RSAAuthentication yes

■TeraTermの設定

TeraTerm を起動し、「設定」→「SSH認証」を選択します。



「RSA暗号鍵を使う」にチェックを入れ、先ほどコピーした identity のファイルを指定します。ユーザー名を入力し、OKをクリックします。



「設定」→「設定の保存」でTERATERM.INI に上書き保存します。



以上の設定を終えたら。「ファイル」→「新規接続」を選択します。



初めてのログインであれば以下のメッセージが表示されますが、「このホストを known hosts リストに追加する」にチェックを入れ、「続行」をクリックすると次回からは表示されなくなります。



SSH認証の画面が現れたら、ssh-keygen実行時に作成したパスフレーズを入力します。「RSA鍵を使う」のチェックは先ほど設定をしたため、既にidentity が選択された状態になっていると思います。OKをクリックして正常にログインできれば成功です。





■ログを確認する

上記で正常にログインできることを確認したら、次に本当にRSAでログインできたかどうか確認しておきましょう。以下のように、Accepted rsa と表示されていれば正常にRSAを使ってログインできたことが確認できます。外に出かけた時などに、外部から自宅のサーバーにアクセスする際には秘密鍵が必要となるので常に持ち歩くようにしましょう∑(; ̄□ ̄

# tail /var/log/messages
Jan 6 16:05:15 ns1 sshd[26545]: Accepted rsa for sakura from 172.16.50.4 port 2706


■各暗号鍵作成のコマンドと生成後のデフォルトの名前

◎OpenSSH1(タイプ:RSA1)

$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/sakura/.ssh/identity):

◎OpenSSH2(タイプ:RSA)

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sakura/.ssh/id_rsa):

◎OpenSSH2(タイプ:DSA)

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/sakura/.ssh/id_dsa):



b. ホストベース認証・公開鍵認証によるアクセス


c. ログイン制限


d. ssh-agentの利用


z. 出題範囲概要

概要 :
  • SSHデーモンの設定と保護ができる。これには、鍵の管理とユーザ用にSSHを設定することも含まれる。

詳細 :
  • OpenSSH サーバーの設定ファイルとデーモン sshd, /etc/ssh/sshd_config /etc/ssh/ssh_host_*_key および ssh_host_*_key.pub
  • スーパーユーザおよび一般ユーザのログインを制限する。 PermitRootLogin, PubKeyAuthentication, AllowUsers, PasswordAuthentication

  [ 例題 ] 


         

    www.it-shikaku.jp